#include <stdio.h>
#include <stdlib.h>
#include "API/APIPuertaCamion.h"
#include "common.h"

int procesarArgumentos(int argc, char *argv[], int *nroPuerta);
void mostrarError(int nroPuerta);

int main(int argc, char* argv[])
{	
	int nroPuerta = 0;
	long idPersona = 0;
	int error = 0;
	//char buffer[100];
	APIPuertaCamion api = APIPuertaCamion();
	
	if (procesarArgumentos(argc, argv, &nroPuerta)) {
		exit(1);
	}
	
	while (1)
	{
		/*sprintf(buffer, "PuertaCamion %d llama a recibirPersona\n", nroPuerta);
		write(fileno(stdout), buffer, strlen(buffer));*/
		idPersona = api.recibirPersona(nroPuerta, &error);
		if (error == ZIPC_FAILURE) {
			mostrarError(nroPuerta);
			return 1;
		}
		
		
		/*sprintf(buffer, "PuertaCamion %d llama a reservarEspacio...\n", nroPuerta);
		write(fileno(stdout), buffer, strlen(buffer));*/
		api.reservarEspacioParaUnaPersona(nroPuerta, idPersona, &error); 
		if (error == ZIPC_FAILURE) {
			mostrarError(nroPuerta);
			return 1;
		}
	}
		
	return 0;	
}

int procesarArgumentos(int argc, char *argv[], int *nroPuerta) {
	char buffer[100];

	if (argc != 2)
	{
		sprintf(buffer, "PuertaCamion - Error: Cantidad de argumentos pasados al programa incorrectos\n");
		write(fileno(stdout), buffer, strlen(buffer));
		return -1;
	}
	
	sscanf(argv[1], "%d", nroPuerta); 
	if (*nroPuerta < 1)
	{
		sprintf(buffer, "PuertaCamion - Error: El identificador de puertaCamion debe ser un número mayor o igual a 1\n");
		write(fileno(stdout), buffer, strlen(buffer));
		return -2;
	}

	return 0;
}

void mostrarError(int nroPuerta)
{
	char buffer[100];
	sprintf(buffer, "PuertaCamión %d: %s\n", nroPuerta, strerror(errno));
	write(fileno(stderr), buffer, strlen(buffer));
}

